﻿using System;
using System.Security.Cryptography;
using System.Text;

namespace CatUtils.Utils.Enhance.Encrypt
{
    /// <summary>
    /// 获取Md5的辅助方法
    /// </summary>
    public class Md5Tool
    {
        /// <summary>
        /// 获取字符串MD5
        /// </summary>
        /// <param name="Utf8Text"></param>
        /// <returns></returns>
        public string GetTextMd5(string Utf8Text)
        {
            byte[] result = Encoding.UTF8.GetBytes(Utf8Text);
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] output = md5.ComputeHash(result);
            return BitConverter.ToString(output).Replace("-", "");
        }

        /// <summary>
        /// 32位MD5加密
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string Md5_32(string str)
        {
            string cl = str;
            string pwd = "";
            MD5 md5 = MD5.Create();//实例化一个md5对像 加密后是一个字节类型的数组，这里要注意编码UTF8/Unicode等的选择　

            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
            // 通过使用循环，将字节类型的数组转换为字符串，此字符串是常规字符格式化所得
            for (int i = 0; i < s.Length; i++)
            {
                // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母，如果使用大写（X）则格式后的字符是大写字符
                pwd += s[i].ToString("x2");
            }
            return pwd;
        }
    }
}